// 路由鉴权
import router from '@/router/index'

// 引入进度条
import nprogress from 'nprogress';
// 引入进度条样式
import "nprogress/nprogress.css"
nprogress.configure({ trickle: false });
// 组件外部js文件引入store数据，需要重新导入创建pinia实例
import pinia from './store'
import { useUserStore } from './store/modules/user'
let userStore = useUserStore(pinia);

// 全局前置守卫
router.beforeEach(async (to, _from, next) => {
  // 返回 false 以取消导航  
  nprogress.start();
  // 通过token，去判断用户是否登录
  let token = userStore.token;
  let username = userStore.username;
  if (token) {
    // 登录成功后关闭login访问权限
    if (to.path == '/login') {
      next({ path: '/' });
      nprogress.done();
    } else {
      // 登录成功后，访问其余路由，确保获取用户信息后，才可以访问平台数据
      if (username) {
        next();
      } else {
        // 重新获取用户信息
        try {
          await userStore.userInfo();
          // 用户刷新获取异步路由，可能获取到的用户信息、异步路由还没有加载完毕，导致白屏
          next({ ...to, replace: true });
        } catch (error) {
          userStore.userLogout();
          next(`/login?redirect=${to.fullPath}`)
        }
      }
    }
  } else {
    /**
     * 没有token
     */
    if (to.path == '/login') {
      next()
    } else {
      next(`/login?redirect=${to.fullPath}`);
      nprogress.done();
    }
  }
})

router.afterEach(() => {
  nprogress.done();
})